从C/S从到B/S
C/S即客户机/服务器,比如qq电脑版。B/S即浏览器/服务器,比如京东网页版。
◆问:C/S有哪些不足?
答:qq客户端有丰富的功能,网络上传递的一般只是数据本身,客户端收到数据之后,负责处理这些数据并进行显示。不过如果qq更新了一个钱包功能,必须通知客户端更新,就是我们平时经常跳出的更新提示。
◆问:如何解决这个间题?
解决办法实际上很简单:让界面的显示效果在服务器端生成,传给客户端;服务器传什么,客户端就显示什么,客户端不要参与太多数据处理。这样,管理员如果想内容修改了,也不需要通知客户端升级,客户端只需要安装负责显示的软件(浏览器),就可以了。
◆问:如何实现?
B/S模式。也分为客户机和服务器两层,但是客户机上不用安装软件,只需要使用浏览器即可,网络上传输的也不再是普通数据,而是将这些数据用HTML等技术进行处理之后的结果。
而Web网站最基本的要求是:必须使客户能够通过HTTP访问网站中的网页。比如,输人http://www.google.com,可以打开Google页面,说明Google就是Web网站。
怎样让用户能通过HTTP访问网页呢?很简单,只需将网页放在服务器中运行。当然,此处所讲的服务器是软件服务器(比如Tomcat),不是硬件服务器。
Cookie原理
Cookie翻译成中文是“小甜饼”的意思,它能够使客户在登录过程中摆脱烦琐的输入账号和密码的过程。 Cookie的原理如下
(1)当用户登录成功后,服务器将其登录信息(如账号、密码)保存在客户端硬盘上的一个小文件内。
(2)下次用户访问该网站,浏览器读取该小文件(即 Cookie)中的信息(如账号、密码)传给服务器。
(3)服务器对这些信息进行验证,如果验证通过,跳转到登录成功的页面。
注意:cookie是保存在客户端。并且下次登录不需要输入账号、密码,并不代表账号、密码不需要在服务器端验证。
MVC思想
想象一下,你用jsp为学校做好了一个学校教务系统。
有一天,学校突然决定,选课表单显示应该更美观一些,要改变显示方法。
由于计算机犯罪越来越多,要求在验证信息的时候多一些功能,如安全密钥等。
数据库迁移,数据库变成了不同的名字,表结构也改变了,查询时需要修改代码。
要解决这些问题,就必须把JSP的某一部分改掉。但是,编写代码时最忌讳的就是在很长的一段程序中修改很小的一部分,这样做代价很高,并且在开发过程中分工也很不方便。如:因此,该方案中,将页面设计和商业逻辑混合在一起,在修改时必须读懂所有代码。从网页编写者的角度讲,希望看到的是大量的标签而不是java。而编程人员也需要知道数据库的结构。美工人员修改显示方法时,需要面对大量数据库访问代码。,开发时bu便于分工。
基于该问题,可以将该JSP拆成三个模块来实现。
首先,编写JSP,负责输入查询代码,提交到 Servlet,。Servlet进行安全验证,调用DAO来访问数据库,得到结果,跳转到JSP显示这种方法。
虽然前期设计比较复杂,但有如下特点
1、适合分工,每一个程序员只需要关心他自己所需要关心的那个模块。
2、维护方便,比如需要修改其中的一个部分,就对相应的模块进行修改就可以了。
对比这两种方案,可以发现,第二种方案把程序分为不同的模块,显示、业务逻辑、过程控制都独立起来,使得软件在可伸缩性和可维护性方面有了很大的优势。如要改变外观显示,只需要修改JSP就可以了;修改验证方法,只需要修改 Servlet就可以了;数据库迁移,只需要修改DAO就可以了。这种思想就是MVC思想。
获取单选、双选、下拉菜单数据
单选
1 | 性别: |
获取数据代码略
多选
1 | 唱歌<input name="fav" type="checkbox" value="singing"> |
下拉菜单
1 | <select name="home"> |
获取数据代码略
jsp有些功能用 JavaScript也能够实现,那有何区别?
答:最大的区别是, Java Script源代码是被服务器发送到客户端,由客户端执行,因此,客户端可以看到 JavaScript源代码;而Java代码却不会。你在开发者工具查看代码是看不到jsp页面中的Java代码的。
为什么需要url传值?
比如教务系统中,每个学生信息后面的删除按钮。点击之后会跳转到删除操作页面。但如何知道要删除哪个学生呢?这就需要在url跳转的时候顺便把要删除的学生学号传过去。当然,也可以传给本页面。
删除
删除
再比如说,让你写一个页面,上有10个链接,分别是1 2 3 4 5 6 7 8 9 10,单击相应的链接,在底部打印相应的乘法表。如点击4打印四四乘法表。url传值就派上用场了。
如果传值是中文会出现乱码问题,传值和取值支付URLEncoder.encode()和URLEncoder.decode()分别进行编码和解码
为什么需要include指令?
比如版权信息,你不可能每个页面每个页面的复制吧,如果有变动岂不是每个都要改?
include指令和include动作的区别
<%@include file=”info.jsp”%>include指令不会实时更新
<jsp:include page=”info.jsp” />include动作会实时更新
include指令在JSP编译时就将对应的文件包含进来。而 include动作则不同,其会在客户端对JSP文件发出请求的时候将对应包含文件的输出包含进来。include动作还会自动检查被包含文件的变化。也就是说,当被包含资源的内容发生
变化的时候,使用 include指令的话,服务器可能不会检测到,所以不会对其进行重新的编译,这给维护带来了巨大的麻烦。include动作则可以在每次客户端发出请求时重新把资源包含进来,进行实时的更新。
其他
URL传值会在浏览器的地址栏中看到传递的信息;
隐藏表单会在客户端页面的源代码中看到传递的信息;
Cookie会在客户端页面的文本文件中看到传递的信息。
检查用户提交的信息是否为空,可以用javascript实现。比如验证是否包含非法字符%,只要客户端检查输入就好了。
问:那如何检查用户所有输入是否有非法字符?
答:用循环获得所有表单数据。
jsp内置对象是自动载入的,因此它们不需要直接实例化。
请求服务器的端口号的方法,可以做类似“检查IP以220开头的用户是非法用户”的事情。
web.xml可以设置欢迎页
servlet为了实现控制者这一角色,必须要能够实现跳转。
过滤器可以判断用户类型,管理员、普通用户。